\section{Spice}
\subsection{Spice3f5}
SPICE(Simulation Program with Integrated Circuit Emphasis)는 
nonlinear dc, nonlinear transient, linear ac 분석을 할 수 있는
범용 회로 시뮬레이션 프로그램이다. 저항, 커패시터, 인덕터를 비롯하여
independent/depedent source들과 transmission line, 스위치,
BJTs, JFETs, MESFETs, MOSFETs과 같은 일반적인 반도체 부품들도 지원한다.
\subsection{Circuit description}
Circuit description의 전체적인 구조는 아래와 같다.\\
.TITLE \textit{$<$any title$>$}\\
$\ast$ \textit{$<$any comment$>$}\\
\\
ename n+ n- $<$value$>$ $<$mname$>$ \ldots\\

aname \ldots\\
.END
타이틀로 시작해서 회로의 요소들을 나열한 후 분석 방법을 적고 .END로
끝내면 된다.
\subsubsection{Circuit elements}
각 요소들을 나타내는 첫문자로 시작되는 8자의 요소 이름과
연결된 노드 번호와 파라미터로 구성되어 있다.
\begin{itemize}
	\item[-] Resistor\\
		RXXXXXXX N1 N2 VALUE
	\item[-] Capacitor\\
		CXXXXXXX N+ N- VALUE $<$IC=INCOND$>$
	\item[-] Inductor\\
		LYYYYYYY N+ N- VALUE $<$IC=INCOND$>$
	\item[-] Voltage source
		VXXXXXXX N+ N- DC VALUE
\end{itemize}
\subsubsection{Circuit analyses}
분석 방법을 나타내는 지시어와 그 분석 방법에 필요한
파라미터로 구성되어 있다.
\begin{itemize}
	\item[-] DC Transfer Function\\
		.DC SRCNAM VSTART VSTOP VINCR
	\item[-] Transient Analysis\\
		.TRAN TSTEP TSTOP $<$TSTART $<$TMAX$>>$
	\item[-] Small-Signal AC Analysis\\
		.AC DEC ND FSTART FSTOP\\
		.AC OCT NO FSTART FSTOP\\
		.AC  LIN NP FSTART FSTOP\\
\end{itemize}
위의 형식으로 작성한 circuit description을 spice3f5의 입력으로 넣으면
결과가 들어 있는 raw 파일을 얻을 수 있다. raw 파일을 읽어들여
원하는 형태로 결과를 출력할 수 있다.
\subsection{How to port spice3f5 to Android}
spice3f5는 기본적으로 다양한 머신과 컴파일러로 빌드 할 수 있도록
여러 설정이 있으나 아주 예전의 머신들에 대한 설정이고 arm 머신에 대한
설정이 있지 않으므로 arm 머신에서 동작할 수 있도록 포팅을 해 주어야 한다.
\begin{enumerate}
\item 타겟에 맞는 os\_android.h 파일 작성 후 port.h에 추가
\item ./conf 디렉토리에 arm-linux-androideabi-gcc 설정파일 추가.\\
CC를 안드로이드 ndk 툴체인의 arm-linux-androideabi-gcc의 전체 경로를 적어
준다.
\item ./conf 디렉토리에 defaults파일 수정.
\begin{enumerate}
\item LDFLAGS에 안드로이드 ndk 툴체인의 라이브러리 경로를 추가 하고 
crtbegin\_dynamic.o를 추가한다. 그리고 -nostdlib 옵션도 추가한다.\\
\item RANLIB도 안드로이드 ndk 툴체인의 arm-linux-androideabi-ranlib로 
바꾼다.
\item GUI는 필요없으므로 INCX와 LIBX의 경로와 라이브러리를 삭제한다.
\item 위 항목과 마찬가지로 INTERFACE\_OPTS도 삭제한다.
\end{enumerate}
\item ./util/skeleton의 make\_def 파일을 수정한다.
\begin{enumerate}
\item INCLUDE를 안드로이드 ndk 툴체인의 include 경로로 바꾼다
\item AR을 안드로이드 ndk 툴체인의 arm-linux-androideabi-ar 경로로 바꾼다.
\end{enumerate}
\item ./util/skeleton의 make\_std 파일을 수정한다.
\begin{enumerate}
\item .c.o 확장자 규칙에 안드로이드 ndk 툴체인의 include 경로를 추가하고
-nostdlib 옵션을 준다.
\end{enumerate}
\item ./util/build arm-linux-androideabi-gcc 명령으로 빌드 한다.
\end{enumerate}

